package com.qrcode.zxing;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.nio.file.Path;
import java.util.HashMap;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

public class CreateQRcode {

	public static void main(String[] args) throws UnsupportedEncodingException {
		//二维码设置(宽,高,文件格式,内容)
		int height = 300;
		int width = 300;
		String format = "png";
		String content = new String("hello world! 你好,世界!".getBytes("UTF-8"),"iso-8859-1");
		
		//定义二维码参数
		HashMap hints = new HashMap();
		hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");//编码
		hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);//纠错等级
		hints.put(EncodeHintType.MARGIN, 2);//偏差值 不设置偏差值容易解析出错
		
		//生成二维码
		try {
			//位图编码(内容,二维码格式(类型),宽,高)
			BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height);
			//生成路径
			Path path = new File("E:/img.png").toPath();
			//生成最终图片(位图,文件格式,路径)
			MatrixToImageWriter.writeToPath(bitMatrix, format, path);
			/*
			 * 给二维码中间加入logo的方法:
			 * 1.将二维码设置为最高纠错等级(提高识别能力)
			 * 2.设置logo的宽高,大小不超过二维码的1/5(提高识别能力)
			 * 3.设置logo的位置,放置在二维码的正中间(必须中间,否则容易解析错误)
			 * 4.重新绘制二维码
			 * 可利用buffedimage存放二维码和logo
			 * graphics获取画笔
			 * 计算坐标后重新drawimage
			 */
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}
